Passed
Push — master ( 80fadb...be82c0 )
by Miloš
03:02
created

AbstractStorage.fetchUser   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
1
import { AngularFireAuth } from "@angular/fire/auth";
2
import * as firebase from "firebase";
3
import { Observable, Subscriber } from "rxjs";
4
import { switchMap } from "rxjs/operators";
5
import { UniFirebaseLoginConfig } from "../config/uni-firebase-login-config";
6
import { UniFirebaseLoginConfigProvider } from "../config/uni-firebase-login-config-provider";
7
import { UserModel } from "../model/user-model";
8
import { IStorageProvider } from "./i-storage-provider";
9
10
export abstract class AbstractStorage<User extends UserModel = UserModel>
11
    implements IStorageProvider<User> {
12
    protected config: UniFirebaseLoginConfig;
13
14
    protected constructor(
15
        protected angularFireAuth: AngularFireAuth,
16
        configProvider: UniFirebaseLoginConfigProvider,
17
    ) {
18
        this.config = configProvider.config;
19
    }
20
21
    public abstract async updateStoredDataByUser(user: User): Promise<void>;
22
23
    public abstract async updateStoredDataByFirebaseUser(
24
        firebaseUser: firebase.User,
25
    ): Promise<void>;
26
27
    public subscribeUser(): Observable<User | null> {
28
        // Get the auth state, then fetch the Firestore user document or return null
29
        return new Observable<User>((subscriber: Subscriber<User | null>) => {
30
            this.angularFireAuth.authState.pipe(
31
                switchMap((user: any) => {
32
                    if (user) {
33
                        this.fetchUserFromStorageByFirebaseUser(user).subscribe(
34
                            result => {
35
                                subscriber.next(result);
36
                            },
37
                        );
38
                    } else {
39
                        // Logged out
40
                        subscriber.next(null);
41
                    }
42
                    return user;
43
                }),
44
            );
45
        });
46
    }
47
48
    protected abstract fetchUserFromStorageByFirebaseUser(
49
        user: firebase.User,
50
    ): Observable<User | null>;
51
52
    /**
53
     * Override this method if you want to use custom model class
54
     */
55
    protected getNewUser(): User {
56
        return this.config.userFactoryFunc() as User;
57
    }
58
}
59